package upc.dew.inscripcionalumnos.dao.impl;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import upc.dew.inscripcionalumnos.dao.CatalogoDAO;
import upc.dew.inscripcionalumnos.exception.ServiceException;
import upc.dew.inscripcionalumnos.model.Distrito;
import upc.dew.inscripcionalumnos.model.EstadoCivil;
import upc.dew.inscripcionalumnos.model.Genero;
import upc.dew.inscripcionalumnos.model.Modalidad;
import upc.dew.inscripcionalumnos.model.Requisito;
import upc.dew.inscripcionalumnos.model.TipoDocumento;

public class CatalogoDAOImpl extends HibernateDaoSupport implements CatalogoDAO
{
    public CatalogoDAOImpl(SessionFactory sessionFactory)
    {
        setSessionFactory(sessionFactory);
    }
    
    public List<Distrito> obtenerDistritos() throws ServiceException
    {   
        return getHibernateTemplate().loadAll(Distrito.class);
    }

    public Distrito obtenerDistrito(String codigoDistrito) throws ServiceException
    {
         return (Distrito) getHibernateTemplate().get(Distrito.class, codigoDistrito);
    }

    public EstadoCivil obtenerEstadoCivil(String codigoEstadoCivil) throws ServiceException
    {
         return (EstadoCivil) getHibernateTemplate().get(EstadoCivil.class, codigoEstadoCivil);
    }

    public TipoDocumento obtenerTipoDocumento(String codigoTipoDocumento) throws ServiceException
    {
        return (TipoDocumento) getHibernateTemplate().get(TipoDocumento.class, codigoTipoDocumento);
    }

    public List<EstadoCivil> obtenerEstadosCivil() throws ServiceException
    {
        return getHibernateTemplate().loadAll(EstadoCivil.class);
    }

    public List<TipoDocumento> obtenerTiposDocumento() throws ServiceException
    {
        return getHibernateTemplate().loadAll(TipoDocumento.class);
    }

    public List<Genero> obtenerGeneros() throws ServiceException
    {
        return getHibernateTemplate().loadAll(Genero.class);
    }

    public List<Requisito> obtenerRequisitos() throws ServiceException
    {
        return getHibernateTemplate().loadAll(Requisito.class);
    }

    public List<Requisito> obtenerRequisitosPorModalidad(Integer modalidad) throws ServiceException
    {
        Session session = getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.getNamedQuery("obtenerRequsitosModalidad");
        query.setInteger("modalidad", modalidad);

        List<Requisito> requisitos = (List<Requisito>) query.list();
        session.close();

        return requisitos;

    }

    public List<Modalidad> obtenerModalidades() throws ServiceException
    {
        return getHibernateTemplate().loadAll(Modalidad.class);
    }


}